package pe.gob.osinergmin.interfase_siaf.dac.dao.impl;

import java.util.List;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.simple.ParameterizedBeanPropertyRowMapper;
import org.springframework.stereotype.Repository;

import pe.gob.osinergmin.interfase_siaf.dac.dao.CertificadoSecuenciaDao;
import pe.gob.osinergmin.interfase_siaf.dac.domain.CertificadoSecuencia;

@Repository("certificadoSecuenciaDao")
public class CertificadoSecuenciaDaoImpl implements CertificadoSecuenciaDao {
	
	
	private NamedParameterJdbcTemplate jdbcParameterTemplateData;	
	 
	 @Autowired
	public void SetDataSource(DataSource dataSourceData){		
		 this.jdbcParameterTemplateData = new NamedParameterJdbcTemplate(dataSourceData);
	 }
	 
	 
	 
	 /**DECLARACION DE SQL**/
	private static final String SQL_COUNT_CERTIFICADO =
			" SELECT COUNT(certificad) FROM certificado_secuencia WHERE certificad=:certificad AND "
			+ " secuencia=:secuencia AND correlativ=:correlativ AND ano_eje =:anoEje ";
	
	private static final String SQL_COUNT_COMPROMISO_ANUAL =
			" SELECT COUNT(certificad) FROM certificado_secuencia WHERE certificad=:certificad AND "
			+ " secuencia=:secuencia AND correlativ=:correlativ AND ano_eje =:anoEje AND ind_certif != 'S' ";
	
	private static final String SQL_COUNT_CERTIFICADO_NUM_DOC =
			" SELECT COUNT(num_doc) FROM certificado_secuencia WHERE num_doc=:numDoc AND "
			+ " cod_doc=:codDoc AND ano_eje =:anoEje AND sec_ejec=:secEjec";
 
	private static final String SQL_SELECT_CERTIFICADO_MONTO =
				" SELECT SUM(monto) AS monto FROM certificado_secuencia WHERE certificad=:certificad AND "
				+ " secuencia=:secuencia AND ano_eje =:anoEje AND sec_ejec=:secEjec";
	 
	private static final String SQL_SELECT_CERTIFICADO_MONTO_MN =
				" SELECT SUM(monto_naci) AS monto_naci FROM certificado_secuencia WHERE certificad=:certificad AND "
				+ " secuencia=:secuencia AND ano_eje =:anoEje AND sec_ejec=:secEjec";
	
	
	
	private static final String SQL_SELECT_CERTIFICADO_FECHA_DOC=
			" SELECT fecha_doc  FROM certificado_secuencia WHERE certificad=:certificad AND "
			+ " secuencia=:secuencia AND correlativ=:correlativ AND ano_eje =:anoEje AND sec_ejec=:secEjec";
	
	/**IMPLEMENTACION DE METODOS**/	
	 @Override
	 public int verificarExiteCertificado(CertificadoSecuencia cert) throws Exception{
		 SqlParameterSource parameters = new BeanPropertySqlParameterSource(cert);
		 return this.jdbcParameterTemplateData.queryForInt(SQL_COUNT_CERTIFICADO, parameters);
	 }
	 
	 @Override
	 public int verificarExiteCompromisoAnual(CertificadoSecuencia cert) throws Exception{
		 SqlParameterSource parameters = new BeanPropertySqlParameterSource(cert);
		 return this.jdbcParameterTemplateData.queryForInt(SQL_COUNT_COMPROMISO_ANUAL, parameters);
	 }
	 
	 @Override
	 public int verificarExiteCertificadoNumDoc(CertificadoSecuencia cert) throws Exception{
		 SqlParameterSource parameters = new BeanPropertySqlParameterSource(cert);
		 return this.jdbcParameterTemplateData.queryForInt(SQL_COUNT_CERTIFICADO_NUM_DOC, parameters);
	 }
	 
	 @Override
     public List<CertificadoSecuencia> bucarMontoTotalCert(CertificadoSecuencia cert) throws Exception {		 
			SqlParameterSource parameters = new BeanPropertySqlParameterSource(cert);
			RowMapper<CertificadoSecuencia> lista = ParameterizedBeanPropertyRowMapper.newInstance(CertificadoSecuencia.class);		
		    return this.jdbcParameterTemplateData.query(SQL_SELECT_CERTIFICADO_MONTO, parameters, lista);	
    }
	 
	@Override
    public List<CertificadoSecuencia> bucarMontoMnTotalCert(CertificadoSecuencia cert) throws Exception {		 
			SqlParameterSource parameters = new BeanPropertySqlParameterSource(cert);
			RowMapper<CertificadoSecuencia> lista = ParameterizedBeanPropertyRowMapper.newInstance(CertificadoSecuencia.class);		
		    return this.jdbcParameterTemplateData.query(SQL_SELECT_CERTIFICADO_MONTO_MN, parameters, lista);	
    } 	
	
	@Override
    public List<CertificadoSecuencia> bucarFechaDocCert(CertificadoSecuencia cert) throws Exception {		 
		    SqlParameterSource parameters = new BeanPropertySqlParameterSource(cert);		
			RowMapper<CertificadoSecuencia> lista = ParameterizedBeanPropertyRowMapper.newInstance(CertificadoSecuencia.class);		
		    return this.jdbcParameterTemplateData.query(SQL_SELECT_CERTIFICADO_FECHA_DOC, parameters, lista);
    } 
	 
	
	

}
